{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# mnist手写数字识别"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先导入要用到的包\n",
    "mnist是tensorflow自带的数据集用于测试\n",
    "matplotlib是画图工具\n",
    "%matplotlib inline 功能是可以内嵌绘图，并且可以省略掉plt.show()这一步。\n",
    "tf.logging.set_verbosity(tf.logging.INFO)是将 TensorFlow 日志信息输出到屏幕"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. 查看数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "读取数据，将数据保存在与本文件所在目录下\n",
    "查看数据中 训练集/验证集/测试集的大小\n",
    "其中图片是一个数据矩阵，而每一个图片都有一个标签，来说明这个图片里是数字几"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "画图看一下训练集里面的图像大概的样子\n",
    "先准备一个画布16*16英寸，这里改大了尺寸，好看一点。。。。\n",
    "将画布分成16小份\n",
    "不显示坐标轴的信息\n",
    "每一幅画的标题用标签，也就是数字真实值显示\n",
    "因为每个图的大小是784，也就是28*28，所以我们将照片的大小还原成28x28的二维图片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xf3d1b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(16,16))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2.开始制作计算图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义学习率learning_rate\n",
    "定义变量输入x，送入的数据size不确定，所以是none，784是维度28*28\n",
    "定义label为y，因为就是0-9，所以可以直接定义为int"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用高斯随机分布初始化权重矩阵\n",
    "然后初始化权重W和偏置项b两个变量\n",
    "之后定义网络未经激活的输出为logits_1和logits2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "至此，模型结构已经定下来了：\n",
    "1. 用高斯随机分布初始化权重矩阵，然后初始化权重W和偏置项b两个变量\n",
    "2. 一共2个隐层，第一层是100个神经元，第二层是10个神经元"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来是用softmax_cross_entropy_with_logits直接获得softmax和cross_entropy交叉熵，获得模型的loss。\n",
    "因为logit和label都是batch的，所以用tf.reduce_mean对batch取平均\n",
    "\n",
    "然后定义优化器： tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
    "之后对优化器求最小损失的操作minimize(cross_entropy_loss)：每执行一次，完成一次前向操作，一次反向操作，然后通过梯度下降优化权重"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "评估模型\n",
    "预测结果，比较label，判断预测是否是对的，其中tf.argmax是取得某个维度的最大值的索引\n",
    "然后计算准确率，其中tf.cast强制类型转换，将bool值转成float32"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上，此次方案的计算图是做好了，不涉及实际的操作，而是指定了一些值和计算方法，包含以下内容：\n",
    "1. 定义了输入和输出，学习率的格式\n",
    "2. 初始化权重w和偏置b，以及多层未经激活的输出logits\n",
    "3. 定义loss和优化器optimizer\n",
    "4. 定义预测值，预测结果，精确度的计算方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. 开始用真实数据训练模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义session，初始化计算图里面的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "循环分批次训练模型\n",
    "一共训练1000次，每个批次里面32个数据\n",
    "通过feed_dict里面给的数据，执行优化器操作optimizer，返回为_，因为不关心结果（只是一个优化权重的操作），所以用_\n",
    "将cross_entropy_loss交叉熵的值赋给loss\n",
    "之后输出模型训练中的一些结果：损失loss和在验证集上的准确率validate_accuracy\n",
    "\n",
    "通过调整学习率learning_rate来改善结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "综合来看，整个模型的训练过程就是：\n",
    "1. 将输入x和输出y，以及学习率给到计算图中\n",
    "2. w和b初始是计算图中用告诉正态分布生成的，后续权重会根据优化器来改变\n",
    "3. 数据到达第一层100个神经元，输出10个值\n",
    "4. 数据到达第二层10个神经元，输出1个值\n",
    "5. 前向传播结束后，优化器根据最后的结果和实际结果进行比对，开始反向传播，得到梯度\n",
    "6. 根据梯度更新权重w\n",
    "7. 使用最新的权重w重新训练，循环\n",
    "\n",
    "模型中，梯度的计算和w的更新直接通过tf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cross_entropy_loss)完成"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 1.007, the validation accuracy is 0.8462\n",
      "after 200 training steps, the loss is 0.276508, the validation accuracy is 0.888\n",
      "after 300 training steps, the loss is 0.327333, the validation accuracy is 0.8948\n",
      "after 400 training steps, the loss is 0.436581, the validation accuracy is 0.9078\n",
      "after 500 training steps, the loss is 0.420468, the validation accuracy is 0.9122\n",
      "after 600 training steps, the loss is 0.191808, the validation accuracy is 0.9196\n",
      "after 700 training steps, the loss is 0.437428, the validation accuracy is 0.926\n",
      "after 800 training steps, the loss is 0.153863, the validation accuracy is 0.926\n",
      "after 900 training steps, the loss is 0.310814, the validation accuracy is 0.9308\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9256\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "    lr=1.0\n",
    "    for i in range(trainig_step):\n",
    "        #调整学习率一下\n",
    "        if trainig_step>100:\n",
    "            lr=0.3\n",
    "        if trainig_step>200:\n",
    "            lr=0.1\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: lr\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当学习率为0.3时，测试集准确率为0.938,0.9516，0.9496\n",
    "\n",
    "当学习率为0.1时，测试集准确率为0.9185，0.9186，0.9319\n",
    "\n",
    "当学习率根据循环次数变化（1-100:1/100-200：0.3/200以上：0.1）,测试集准确率为0.9256"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "———————————————————————————————————————————————————————————————————————\n",
    "模型效果差的原因：\n",
    "应该和隐层数量，神经元数量不够导致的，其次是没有使用L1/L2进行超参数调优\n",
    "\n",
    "个人觉得模型效果还行啊，老师视频里用的是单层，所以最后结果比较差，这边用的是双层。。。。\n",
    "\n",
    "通过尝试优化学习率来提高准确性（根据循环次数变化），但是结果似乎还是学习率为0.3的好，这个是为什么？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x100fbf28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "最后这一块的代码应该是将之前保存的训练器在测试集上进行结果的测试。\n",
    "画图是显示这张图识别正确的概率是多少"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
